// @author caoshi
// @date 2023/2/14 20:33
// @since 1.0
package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name    string   `json:"name"`
	Age     int      `json:"age"`
	Height  float64  `json:"height"`
	Hobbies []string `json:"hobbies"`
}

//func main() {
//
//	// 对象转 JSON 字符串
//	u := User{"张三", 19, 180.0, []string{"篮球", "跑步"}}
//	bytes, _ := json.Marshal(u)		// Marshal函数转成的是 byte 数组
//	jsonStr := string(bytes)		// 通过类型转换将字节数组转成json字符串
//	fmt.Println(jsonStr)
//
//	// JSON 字符串转对象
//	var u2 User		// 定义结构体变量接收
//	_ = json.Unmarshal([]byte(jsonStr), &u2)	// 相反地类型转换将json字符串转成字节数组后 再调用 json.Unmarshal 函数
//	fmt.Println(u2)
//
//}

//func main() {
//	u1 := User{"张三", 19, 180.0, []string{"篮球", "跑步"}}
//	u2 := User{"李四", 18, 172.0, []string{"散步", "看书"}}
//	u3 := User{"王五", 20, 169.0, []string{"篮球", "爬山"}}
//	u4 := User{"赵六", 21, 158.0, []string{"乒乓球", "涉水"}}
//
//	users := []User{u1, u2, u3, u4}
//	bytes, _ := json.Marshal(users)
//	jsonStr := string(bytes)
//	fmt.Println(jsonStr)
//
//	var users2 []User		// 定义结构体切片
//	_ = json.Unmarshal([]byte(jsonStr), &users2)	// 将json数组（字符串）转成结构体切片
//	fmt.Println(users2)
//
//}

func main() {

	jsonStr := `{"name": "zhangsan", "age": 19}`
	mp := make(map[string]interface{})
	_ = json.Unmarshal([]byte(jsonStr), &mp)
	fmt.Println(mp)
	fmt.Println(mp["name"]) // zhangsan

	fmt.Println("------------------------------------")

	// 遍历map 取出键和值
	for k, v := range mp {
		fmt.Println(k, v)
	}

	// 只取出key
	for k, _ := range mp {
		fmt.Println(k)
	}

	// 只取出 value
	for _, v := range mp {
		fmt.Println(v)
	}

}
